其他
揭秘|字节跳动基于Flink SQL的流式数据质量监控(下)实践细节
目前,字节跳动数据质量平台对于批处理数据的质量管理能力已经十分丰富,提供了包括表行数、空值、异常值、重复值、异常指标等多种模板的数据质量监控能力,也提供了基于spark的自定义监控能力。另外,该平台还提供了数据对比和数据探查功能,为用户在数据开发阶段及时发现数据质量问题提供了便利的手段。
DataLeap
流式数据质量监控的技术架构将规则元数据保存到DB。 根据规则的报警指标定义,在数据开发平台上创建对应的Flink SQL任务。 将报警条件映射为报警平台的触发规则。
Flink SQL作业的执行逻辑
-- SOURCE TABLE DDL:定义了Kafka数据源及消费策略
create table data_source (
app_id BIGINT,
name VARCHAR,
_meta_timestamp BIGINT,
time_formatted VARCHAR,
price DOUBLE,
type VARCHAR
) with (
'format.type' = 'json',
'update-mode' = 'append',
'metadata.fields.mapping' = 'timestamp=_meta_timestamp',
'connector.version' = '0.10',
'format.derive-schema' = 'true',
'connector.topic' = 'kafka_topic',
'connector.group.id' = 'kafka_group_id',
'connector.startup-mode' = 'latest-offset',
'connector.type' = 'kafka',
'format.skip-dirty' = 'true',
...
);
-- SINK TABLE DDL:定义了TSDB Sink
create table data_sink(
type varchar,
name varchar,
val double,
tags varchar
) with (
'connector.type' = 'tsdb',
'connector.tsdb.table' = 'tsdb_table',
...
);
-- RULE SQL 1:计算字段app_id的空值率
INSERT INTO data_sink
SELECT
'COUNTER' AS type,
'r0' AS name,
CAST(1.0 AS DOUBLE) AS val,
CONCAT('{', IF(`app_id` is null, 'app_id=nit', 'app_id=normal') , ',' , IF(`name` is null, 'name=nit', 'name=normal') ,'}') AS tags
FROM data_source;
-- RULE SQL 2:以time_formatted为事件时间,计算数据写入延迟
INSERT INTO data_sink
SELECT
'TIMER' AS type,
'r1' AS name,
CAST((_meta_timestamp - UNIX_TIMESTAMP(time_formatted, 'yyyy-MM-dd HH:mm:ss') * 1000) AS DOUBLE) AS val,
'{}' AS tags
FROM data_source;
-- RULE SQL 3:计算指标app_id的取值范围
INSERT INTO data_sink
SELECT
'TIMER' AS type,
'r2.app_id' AS name,
CAST(app_id AS DOUBLE) AS val,
'{}' AS tags
FROM data_source
WHERE app_id IS NOT NULL;
Flink SQL作业的管理
1、规则的新建、删除、关闭等操作时,向数据开发平台提交Flink SQL作业的创建或更新
2、借助数据开发平台的能力,实现作业的启停、重启、监控等运维操作。
3、另外,用户可在数据质量平台上对监控作业的资源进行调整(如下图所示),对资源配置的调整会实时更新到对应的Flink SQL作业中。
报警的诊断和管理
监控结果展示
DataLeap
流式监控现状支持的监控类型
问题与挑战
产品介绍
火山引擎大数据研发治理套件DataLeap
一站式数据中台套件,帮助用户快速完成数据集成、开发、运维、治理、资产、安全等全套数据中台建设,帮助数据团队有效的降低工作成本和数据维护成本、挖掘数据价值、为企业决策提供数据支撑。后台回复数字“2”了解产品
http://griffin.apache.org/docs/profiling.html
How to Monitor Data Stream Quality Using Spark Streaming and Delta Lake
https://github.com/awslabs/deequ
- End -